#include "GetDirOp.h"
#include "WONCommon/WriteBuffer.h"
#include "WONCommon/ReadBuffer.h"
//#include "DirEntityReplyParser.h"

using namespace std;
using namespace WONAPI;

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void GetDirOp::Init()
{
	mLengthFieldSize = 4;
	mGetEntityRequest = new GetEntityRequest();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
GetDirOp::GetDirOp(ServerContext *theDirContext) : ServerRequestOp(theDirContext)
{
	Init();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
GetDirOp::GetDirOp(const IPAddr &theAddr) : ServerRequestOp(theAddr)
{
	Init();
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void GetDirOp::Reset()
{
	mGetEntityRequest->Reset();
}


///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
WONStatus GetDirOp::GetNextRequest()
{
	WriteBuffer aMsg(mLengthFieldSize);
	aMsg.AppendByte(5);						// Small Header
	aMsg.AppendShort(2);					// DirServer
	aMsg.AppendShort(103);					// GetDirectoryEx

	// Pack the message data
	mGetEntityRequest->Pack(&aMsg, GetEntityRequest::Pack_GetDirOp);

	mRequest = aMsg.ToByteBuffer();
	return WS_ServerReq_Recv;
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
WONStatus GetDirOp::CheckResponse()
{
	WONStatus aStatus = mGetEntityRequest->ParseMultiEntityReply(mResponse->data(), mResponse->length());
		
	if(aStatus==WS_ServerReq_InvalidReplyHeader)
		return InvalidReplyHeader();
	else
		return aStatus;
}
